home *** CD-ROM | disk | FTP | other *** search
- .text
-
- .extern _crv
- .extern _cbu
- .extern _cgu
- .extern _cgv
- .extern _Clip
-
-
-
- .globl _WriteFrame8
- _WriteFrame8:
- # r3 = source video buffer
- # r4 = CGfx frame buffer
- # r5 = bytes per row
- # r6 = width in bytes
- # r7 = height
-
- andi. r8,r6,31
- li r11,-32
- and r6,r6,r11
- # cmpw r5,r6
- # bge+ .bprok
- # mr r5,r6
- #.bprok:
- sub r5,r5,r6
- srawi r6,r6,5
- subi r3,r3,8
- subi r4,r4,8
- .loop:
- mtctr r6
- .loop2:
- lfdu f0,8(r3)
- lfdu f1,8(r3)
- lfdu f2,8(r3)
- lfdu f3,8(r3)
- stfdu f0,8(r4)
- stfdu f1,8(r4)
- stfdu f2,8(r4)
- stfdu f3,8(r4)
- bdnz .loop2
- add r3,r3,r8
- add r4,r4,r5
- subic. r7,r7,1
- bne .loop
- blr
-
-
- .globl _WriteFrame15
- _WriteFrame15:
- # r3 = source ptr array: *src[3]
- # r4 = CGfx frame buffer
- # r5 = src width
- # r6 = src height
- # r7 = Cgfx bytes per row
- # r8 = Cgfx modulo
-
- .set fb,r4
- .set width,r5
- .set height,r6
- .set bpr,r7
- .set modulo,r8
- .set py1,r9
- .set py2,r10
- .set pu,r11
- .set pv,r12
- .set d,r22
- .set c32768,r23
- .set Clip,r24
- .set y,r25
- .set u,r26
- .set v,r27
- .set crv,r28
- .set cbu,r29
- .set cgu,r30
- .set cgv,r31
-
- stwu r1,-64(r1)
- srwi height,height,1
- stw r22,24(r1)
- stw r23,28(r1)
- stw r24,32(r1)
- stw r25,36(r1)
- stw r26,40(r1)
- stw r27,44(r1)
- stw r28,48(r1)
- stw r29,52(r1)
- stw r30,56(r1)
- stw r31,60(r1)
- lis c32768,32768@h
- lwz py1,0(r3)
- ori c32768,c32768,32768@l
- lwz pu,4(r3)
- add modulo,modulo,bpr
- lwz pv,8(r3)
- subi py1,py1,1
- lwz crv,_crv(r2)
- subi pu,pu,1
- lwz cbu,_cbu(r2)
- subi pv,pv,1
- lwz cgu,_cgu(r2)
- add py2,py1,width
- lwz cgv,_cgv(r2)
- lwz Clip,_Clip(r2)
-
- .rowloop15:
- srwi r0,width,1
- mtctr r0
-
- .colloop15:
- lbzu u,1(pu)
- lbzu v,1(pv)
- subi u,u,128
- subi v,v,128
-
- lbzu y,1(py1)
- li d,0
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,23,1,5
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,18,6,10
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,13,11,15
-
- lbzu y,1(py1)
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,7,17,21
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,2,22,26
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,29,27,31
- stw d,0(fb)
-
- lbzu y,1(py2)
- li d,0
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,23,1,5
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,18,6,10
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,13,11,15
-
- lbzu y,1(py2)
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,7,17,21
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,2,22,26
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,29,27,31
- stwx d,fb,bpr
-
- addi fb,fb,4 # next column
- bdnz .colloop15
-
- add fb,fb,modulo # next row
- subic. height,height,1
- add py1,py1,width
- add py2,py2,width
- bne .rowloop15
-
- lwz r22,24(r1)
- lwz r23,28(r1)
- lwz r24,32(r1)
- lwz r25,36(r1)
- lwz r26,40(r1)
- lwz r27,44(r1)
- lwz r28,48(r1)
- lwz r29,52(r1)
- lwz r30,56(r1)
- lwz r31,60(r1)
- addi r1,r1,64
- blr
-
-
- .globl _WriteFrame16
- _WriteFrame16:
- # r3 = source ptr array: *src[3]
- # r4 = CGfx frame buffer
- # r5 = src width
- # r6 = src height
- # r7 = Cgfx bytes per row
- # r8 = Cgfx modulo
-
- .set fb,r4
- .set width,r5
- .set height,r6
- .set bpr,r7
- .set modulo,r8
- .set py1,r9
- .set py2,r10
- .set pu,r11
- .set pv,r12
- .set d,r22
- .set c32768,r23
- .set Clip,r24
- .set y,r25
- .set u,r26
- .set v,r27
- .set crv,r28
- .set cbu,r29
- .set cgu,r30
- .set cgv,r31
-
- stwu r1,-64(r1)
- srwi height,height,1
- stw r22,24(r1)
- stw r23,28(r1)
- stw r24,32(r1)
- stw r25,36(r1)
- stw r26,40(r1)
- stw r27,44(r1)
- stw r28,48(r1)
- stw r29,52(r1)
- stw r30,56(r1)
- stw r31,60(r1)
- lis c32768,32768@h
- lwz py1,0(r3)
- ori c32768,c32768,32768@l
- lwz pu,4(r3)
- add modulo,modulo,bpr
- lwz pv,8(r3)
- subi py1,py1,1
- lwz crv,_crv(r2)
- subi pu,pu,1
- lwz cbu,_cbu(r2)
- subi pv,pv,1
- lwz cgu,_cgu(r2)
- add py2,py1,width
- lwz cgv,_cgv(r2)
- lwz Clip,_Clip(r2)
-
- .rowloop16:
- srwi r0,width,1
- mtctr r0
-
- .colloop16:
- lbzu u,1(pu)
- lbzu v,1(pv)
- subi u,u,128
- subi v,v,128
-
- lbzu y,1(py1)
- li d,0
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,24,0,4
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,19,5,10
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,13,11,15
-
- lbzu y,1(py1)
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,8,16,20
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,3,21,26
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,29,27,31
- stw d,0(fb)
-
- lbzu y,1(py2)
- li d,0
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,24,0,4
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,19,5,10
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,13,11,15
-
- lbzu y,1(py2)
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,8,16,20
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,3,21,26
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,29,27,31
- stwx d,fb,bpr
-
- addi fb,fb,4 # next column
- bdnz .colloop16
-
- add fb,fb,modulo # next row
- subic. height,height,1
- add py1,py1,width
- add py2,py2,width
- bne .rowloop16
-
- lwz r22,24(r1)
- lwz r23,28(r1)
- lwz r24,32(r1)
- lwz r25,36(r1)
- lwz r26,40(r1)
- lwz r27,44(r1)
- lwz r28,48(r1)
- lwz r29,52(r1)
- lwz r30,56(r1)
- lwz r31,60(r1)
- addi r1,r1,64
- blr
-
-
- .globl _WriteFrame32
- _WriteFrame32:
- # r3 = source ptr array: *src[3]
- # r4 = CGfx frame buffer
- # r5 = src width
- # r6 = src height
- # r7 = Cgfx bytes per row
- # r8 = Cgfx modulo
-
- .set fb,r4
- .set width,r5
- .set height,r6
- .set bpr,r7
- .set modulo,r8
- .set py1,r9
- .set py2,r10
- .set pu,r11
- .set pv,r12
- .set d,r22
- .set c32768,r23
- .set Clip,r24
- .set y,r25
- .set u,r26
- .set v,r27
- .set crv,r28
- .set cbu,r29
- .set cgu,r30
- .set cgv,r31
-
- stwu r1,-64(r1)
- srwi height,height,1
- stw r22,24(r1)
- stw r23,28(r1)
- stw r24,32(r1)
- stw r25,36(r1)
- stw r26,40(r1)
- stw r27,44(r1)
- stw r28,48(r1)
- stw r29,52(r1)
- stw r30,56(r1)
- stw r31,60(r1)
- lis c32768,32768@h
- lwz py1,0(r3)
- ori c32768,c32768,32768@l
- lwz pu,4(r3)
- add modulo,modulo,bpr
- lwz pv,8(r3)
- subi py1,py1,1
- lwz crv,_crv(r2)
- subi pu,pu,1
- lwz cbu,_cbu(r2)
- subi pv,pv,1
- lwz cgu,_cgu(r2)
- add py2,py1,width
- lwz cgv,_cgv(r2)
- lwz Clip,_Clip(r2)
-
- .rowloop32:
- srwi r0,width,1
- mtctr r0
-
- .colloop32:
- lbzu u,1(pu)
- lbzu v,1(pv)
- subi u,u,128
- subi v,v,128
-
- lbzu y,1(py1)
- li d,0
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,16,8,15
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,8,16,23
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,0,24,31
- stw d,0(fb)
-
- lbzu y,1(py1)
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,16,8,15
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,8,16,23
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,0,24,31
- stw d,4(fb)
-
- lbzu y,1(py2)
- li d,0
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,16,8,15
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,8,16,23
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,0,24,31
- stwux d,fb,bpr
-
- lbzu y,1(py2)
- subi y,y,16
- lis r3,76309@h
- ori r3,r3,76309@l
- mullw y,y,r3
- mullw r3,crv,v
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,16,8,15
- mullw r3,cgu,u
- mullw r0,cgv,v
- sub r3,y,r3
- sub r3,r3,r0
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,8,16,23
- mullw r3,cbu,u
- add r3,r3,y
- add r3,r3,c32768
- srawi r0,r3,16
- lbzx r3,Clip,r0
- rlwimi d,r3,0,24,31
- stw d,4(fb)
-
- sub fb,fb,bpr # next column
- addi fb,fb,8
- bdnz .colloop32
-
- add fb,fb,modulo # next row
- subic. height,height,1
- add py1,py1,width
- add py2,py2,width
- bne .rowloop32
-
- lwz r22,24(r1)
- lwz r23,28(r1)
- lwz r24,32(r1)
- lwz r25,36(r1)
- lwz r26,40(r1)
- lwz r27,44(r1)
- lwz r28,48(r1)
- lwz r29,52(r1)
- lwz r30,56(r1)
- lwz r31,60(r1)
- addi r1,r1,64
- blr
-
-
- .globl _yuv2pip
- _yuv2pip:
- # r3 = *address
- # r4 = **srcbuffer
- # r5 = x
- # r6 = y
- # r7 = br
-
- stwu r1,-48(r1)
- stw r14,24(r1)
- stw r15,28(r1)
- stw r16,32(r1)
- stw r17,36(r1)
- stw r18,40(r1)
- stw r19,44(r1)
-
- subi r3,r3,4
- lwz r14,0(r4)
- addi r5,r5,1
- addi r6,r6,1
- lwz r15,4(r4)
- subi r14,r14,2
- lwz r16,8(r4)
- subi r15,r15,1
- subi r16,r16,1
-
- piploop1:
- mtctr r5
- mr r9,r15
- mr r10,r16
- piploop2:
- lhzu r17,2(r14)
- mr r18,r17
- li r12,255
- and r17,r17,r12
- add r17,r17,r7
- cmpwi r17,255
- ble pipfok
- li r17,255
- pipfok:
- cmpwi r17,0
- bge pipfok2
- li r17,0
- pipfok2:
- rlwinm r18,r18,32-8,8,31
- add r18,r18,r7
- cmpwi r18,255
- ble pipfok1
- li r18,255
- pipfok1:
- cmpwi r18,0
- bge pipfok3
- li r18,0
- pipfok3:
- lbzu r19,1(r15)
- lbzu r11,1(r16)
- rlwinm r18,r18,8,16,23
- or r18,r18,r19
- rlwinm r18,r18,16,0,16
- rlwinm r17,r17,8,16,23
- or r17,r17,r11
- or r17,r17,r18
- stwu r17,4(r3)
- bdnz piploop2
-
- mr r15,r9
- mr r16,r10
- mtctr r5
- piploop3:
- lhzu r17,2(r14)
- mr r18,r17
- li r12,255
- and r17,r17,r12
- add r17,r17,r7
- cmpwi r17,255
- ble pipok4
- li r17,255
- pipok4:
- cmpwi r17,0
- bge pipok5
- li r17,0
- pipok5:
- rlwinm r18,r18,32-8,8,31
- add r18,r18,r7
- cmpwi r18,255
- ble pipok6
- li r18,255
- pipok6:
- cmpwi r18,0
- bge pipok7
- li r18,0
- pipok7:
- lbzu r19,1(r15)
- lbzu r11,1(r16)
- rlwinm r18,r18,8,16,23
- or r18,r18,r19
- rlwinm r18,r18,16,0,16
- rlwinm r17,r17,8,16,23
- or r17,r17,r11
- or r17,r17,r18
- stwu r17,4(r3)
- bdnz piploop3
-
- subic. r6,r6,1
- bne piploop1
-
- lwz r14,24(r1)
- lwz r15,28(r1)
- lwz r16,32(r1)
- lwz r17,36(r1)
- lwz r18,40(r1)
- lwz r19,44(r1)
- addi r1,r1,48
- blr
-